﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ControlClick</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>ControlClick</h1>

<p>向指定控件发送一个鼠标点击或鼠标滚轮事件。 </p>

<p class="CommandSyntax">ControlClick [, 


 Control-or-Pos, 


 WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr>
    <td width="15%">Control-or-Pos</td>
    <td width="85%"><p>如果此 参数(parameter)为空，目标窗口的最顶端控件将被点击(如果窗口没有控件则点击窗口本身)。如果有参数，则分为以下两种模式。</p>
      <p>模式 1 (坐标): 被指定的X和Y坐标相对于目标窗口的左上角。X坐标必须位于Y坐标的前面，并且他们之间至少要有一个空格或者制表符把他们隔开。例如:<em> X55 Y33</em>。如果有一个控件位于这个指定的坐标处，则将发送鼠标事件到该坐标处(控件将被点击)。如果此处没有控件，则目标窗口自身会被发送鼠标事件(也许并不会产生效果，取决于这个窗口)。在这种情况下,<em>Options</em>参数(parameter)里的X和Y选项将被忽略。</p>      
      <p>模式 2 (控件的 ClassNN 或 文本): 可以是控件的名称/文本或 ClassNN (控件的 classname(类名)和序号)，它们都可以通过 Window Spy   来确定。当使用名称/文本时，matching behavior (匹配模式)通过 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定。</p>
      <p>默认情况下，模式2 优先于模式1。打比方，有这样的一个控件，它的文本或ClassNN是这样的格式: &quot;Xnnn Ynnn&quot;，这种情况下模式2将会生效。如果想要使用模式1(坐标)并且避免这种情况的发生，请在<em>Options</em>中指定Pos一词。例如: ControlClick, x255 y152, WinTitle,,,, Pos</p>
    <p>如果要通过控件的HWND (句柄)来操作, 请在此参数(parameter)上留空并在<em>WinTitle</em>上指定<em>ahk_id %控件句柄%</em> (这样仍可以作用于隐藏的控件即使 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 设定为 Off)。控件的HWND可以通过以下方式来获取: <a href="ControlGet.htm#Hwnd">ControlGet Hwnd</a>, <a href="MouseGetPos.htm">MouseGetPos</a>, 或者 <a href="DllCall.htm">DllCall</a>。</p></td>
  </tr>
  <tr>
    <td>WinTitle</td>
    <td>目标窗口的标题或标题中的部分文字（匹配模式由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定）。如果这个参数和另外 3 个参数(WinText，ExcludeTitle，ExcludeText)都被忽略，默认目标是 <a href="../LastFoundWindow.htm">上一次匹配窗口</a> 。如果这个参数使用字母 A ，同时省略其它 3 个窗口参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 <em>ahk_class 精确 class 名</em>（Window Spy 中可以显示 class 名）。要用窗口的 <a href="Process.htm">进程标识符（PID）</a>进行匹配，使用 <em>ahk_pid %PID变量%</em> 。要用 <a href="GroupAdd.htm">窗口组</a> ，使用 <em>ahk_group 组名</em> （此时 <em>WinText</em> ，<em>ExcludeTitle</em> ，以及 <em>ExcludeText</em> 三个变量要省略）。要用窗口的 <a href="WinGet.htm">唯一 ID</a> 进行匹配，使用 <em>ahk_id %ID变量%</em> 。要减小检测范围，使用 <a href="../LastFoundWindow.htm#multi">多重条件</a> ，例如：<em>My File.txt ahk_class Notepad</em></td>
  </tr>
  <tr>
    <td>WinText</td>
    <td>如果使用这个参数(parameter)，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 <a href="DetectHiddenText.htm">DetectHiddenText</a> 设置为 ON 的时候才能检测到。</td>
  </tr>
  <tr>
    <td>WhichButton</td>
    <td><p>要发送的鼠标事件: LEFT(左键), RIGHT(右键), MIDDLE(中键) (或者取这些单词的首字母)。如果忽略或留空，将点击左键。</p>
      <p>Windows 2000/XP 及以上：X1 (X按键1，第4个鼠标按键) 和 X2 (X按键2,第5个鼠标按键) 是被支持的。</p>
      <p>Windows NT/2000/XP 及以上：WheelUp (or WU) 和 WheelDown (or WD) 是被支持的。在这种情况下， <em>ClickCount</em> 是滚轮滚动的次数。</p>      
      <p>Windows Vista 及以上 [v1.0.48+]：WheelLeft (or WL) 和 WheelRight (or WR) 是被支持的 (它们在旧的操作系统中没有效果)。 在这种情况下， <em>ClickCount</em> 是滚轮滚动的次数。</p>
    </td>
  <tr>
    <td>ClickCount</td>
    <td>发送鼠标点击事件的次数，可以使用 <a href="../Variables.htm#Expressions">expression(表达式)</a>。如果忽略或者留空，默认次数为 1 。 </td>
  </tr>
  <tr>
    <td>Options</td>
    <td><p>一个选项字母的序列，包含零个或更多的选项字母。例如: <em>d x50 y25</em></p>
      <p><strong>NA</strong> [v1.0.45+]: 可能提高可靠性。参考下面的 <a href="#Reliability">reliability</a> (可靠性)。</p>
      <p><strong>D</strong>: 按住鼠标按键并不放开(产生一个按下的事件)。如果 <strong>D</strong> 和 <strong>U</strong> 两个选项都不存在的话，则将发送一个完整的点击(按下再放开)。</p>
      <p><strong>U</strong>: 放开鼠标按键(产生一个放开的事件)。如果 <strong>D</strong> 已经存在则不能同时使用这个选项 (反之亦然)。</p>
      <p><strong>Pos</strong>: 在 <em>Options</em> 的任何位置指定 Pos 一词，以无条件地使用X/Y坐标模式，就像在上面<em> Control-or-Pos</em> 参数里描述的那样。 </p>
      <p><strong>Xn</strong>: <strong>n</strong>指定要点击的X坐标，相对于控件的左上角。如果没有指定，则点击会被发送到控件的横向中点。</p>
      <p><strong>Yn</strong>: <strong>n</strong>指定要点击的Y坐标，相对于控件的左上角。如果没有指定，则点击会被发送到控件的纵向中点。</p>
    <p>请对 <strong>X</strong> 和 <strong>Y</strong> 选项使用十进制(而非十六进制)数字。</p></td>
  </tr>
  <tr>
    <td>ExcludeTitle</td>
    <td>标题含有此参数值的窗口将不被考虑。</td>
  </tr>
  <tr>
    <td>ExcludeText</td>
    <td>文本含有此参数值的窗口将不被考虑。</td>
  </tr>
</table>

<h3>ErrorLevel</h3>
<p>如果出现问题，<A href="../misc/ErrorLevel.htm">ErrorLevel</A> 值将被设置为 1 ，否则为 0 。</p>
<h3><a name="Reliability"></a>reliability (可靠性)</h3> 
<p>提高可靠性 -- 特别是当用户正在使用鼠标的时候进行 ControlClick -- 请尝试一下的两点或其一 :</p>
<p>1) 在 ControlClick 之前使用 <a href="SetControlDelay.htm">SetControlDelay -1</a> 。这样可以避免在点击时鼠标按键被按住，以降低用户对鼠标操作时对脚本运行造成的干扰。</p>
<p>2) 在任何地方指定 NA 在第6个参数 (<em>Options</em>)，如下所示:</p>
<pre>SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA</pre>
<p>&quot;NA&quot; 可以避免激活目标窗口，也可以避免它的输入处理和脚本的相混淆，而这可以免除物理鼠标移动带来的干扰 (通常是在目标窗口没有激活时)。然而，这个方法可能对所有类型的窗口和控件都无效。</p>
<h3>注意</h3>
<p>不是所有的程序都会响应一个 <em>ClickCount </em>大于 1 的鼠标滚轮事件。对于这些程序，请使用一个循环来发送一个级数大于 1 的滚轮事件，就像这个使其滚动 5 级的例子:</p>
<pre>Loop, 5
    ControlClick, <em>Control</em>, <em>WinTitle</em>, <em>WinText</em>, WheelUp</pre>
<p>窗口的标题和包含的文本是区分大小写的。隐藏的窗口是不会被检测到的，除非 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 被打开(DetectHiddenWindows On)。</p>

<h3>相关命令</h3>
<p><a href="SetControlDelay.htm">SetControlDelay</a>, <a href="Control.htm">Control</a>, <a href="ControlGet.htm">ControlGet</a>, <a href="ControlGetText.htm">ControlGetText</a>, <a href="ControlMove.htm">ControlMove</a>, <a href="ControlGetPos.htm">ControlGetPos</a>, <a href="ControlFocus.htm">ControlFocus</a>, <a href="ControlSetText.htm">ControlSetText</a>, <a href="ControlSend.htm">ControlSend</a>, <a href="Click.htm">Click</a></p>
<h3>示例</h3>
<pre class="NoIndent">ControlClick, OK, Some Window Title  <em>; 点击OK按钮。</em>
ControlClick, x55 y77, WinTitle  <em>;点击一个设置的坐标。注意X和Y之间的空隙(至少一个空格或者制表符，没有逗号)。</em>
<em>; 下面的方法可能会提高可靠性并且减少其他不好的效果:</em>
SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA x192 y10  <em>; 在 NA 模式下点击相对于一个指定控件的坐标。</em>
</pre>


</body>
</html>
